音色 - 一款 visual novel + 視覺受限的闖關遊戲

  • 以下會提到:
    • 時間線的概述
    • 心得
    • Godot 一些有趣的點
    • 結論

前情提要

2024 05/17-19 (時間戳皆是 17:00) 是臺師大資工系學生舉辦的第一屆 Normal Game Jam 比賽

我不會說有一部分的大一的參賽者是為了程式設計二的期末 Bonus 而來參賽的。

而且這時間鄰近期末,這比賽真的 high 到我一堆原本假日要寫的作業和要準備的面試都要順延。

到了大四連遊戲引擎都沒玩過的 我, 政皓, 文政 組成一組參賽。

以下為了輸入方便(笨笨輸入法)我定義一下稱呼:

  • 文政:Beck
  • 政皓:Hsujinho

參賽前一天

Beck: 來找一下可能會使用到的引擎或 tool,看看有哪些可以套的就先去睡。

我們找了一會兒,討論了一下可能會有的主題與對策 (我記得有討論跟沒討論是一樣的),然後就去休息了。

參賽當天

進賽場

當天一個人報到即可,就…

對,藍色 ICPC 衣服那個,我一個報到。

主題是當天決定,匿名投票指定三個主題(官方有詳細解釋三個主題的內容與定義),最後由主辦單位從籤筒拿出一張作為此次比賽的主題。

主題有三個:

  1. It’s not a bug, it’s a feature
  2. 打破第四面牆
  3. 視覺受限

最後抽到 3. 視覺受限

官方有提供熬夜教室,第二天開始才提供點心、飲料,當然,他們說也可以回家做。

然後,開始 48 小時 Game Jam !!!

回到家 - Remain 47 hours

我: 買個飯後來討論一下

— 一段時間後 —

Beck: 就 Godot 吧
Hsujinho: (進來語音討論)

(開始一系列的討論做什麼為主題,直到 Smallten 電神出現)

— 講述玩要做的給 Smallten —

「視覺受限、闖關、類 RPG 操作套版,你們可以試試 RPG Maker 然後魔改它。」

這裡先說明我們要做的需求與目標

前情提要: 我記得 Beck 說他從寶可夢的 RPG 「獲得靈感」。

一個益智遊戲,可以在 2D 地圖上與機關互動,找到下一關的門,進入下一層關卡,一個塔共六層,中間有可能會有物件導致玩家死亡並重生在當前關卡,或是掉到洞窟裡直達前 N 關的某一關(也就是掉回之前走過的某一關),最後用黑色的 background 蓋上去,探知的呈現就像 Dark Echo 和 GTAV 手機找紅點訊號。

— 使用一陣子 RPG Maker 後 —

我:乾!我找不到要怎麼把這個血量條拿掉…乾!為什麼這裡有這個量條,找不到那裡可以拿掉…乾!怎麼一堆東西要拿掉,我們的需求沒這麼多…e04!…

崩潰,三個多小時過去,0 進度。

Beck: 沒事,這期間我看了 Godot 的 Doc 和操作了一下了。已經把地圖的 component 和 pixel 都拉好了。

Remain 44 hours (以扣除討論時間)

Hsujinho:需要擬一下文本,我覺得我可以先說一下劇情的概要。

(說明了一下劇情的概要後…)

SubaRya: 我覺得我可以找一下 Visual Novel 的 Godot Plugin。

(摸索了一段時間後…)

Remain 40.5 hours

SubaRya: @Hsujinho, Plugin 找到了,用 Dialogic,基本操作方法和 Demo 都已經摸過了,而且接到 Godot 的 Api 我這裡也了解大概了,耦合性不高,你可以透過這個 timelime 的 dtl file 製作劇情,至於後續接 Api 我來處理即可。

(開始教怎麼用 Dialogic)

Remain 39.5 hours

(我記得沒錯第一天我們是說定好細項後我們就要休息,但我沒記錯過程中我們還是有在做事,但就不多。)

(回想起來了,文政會連夜趕工,我去睡,我跟文政會輪流值班趕工。我賴床到早上 9 點才跟 Beck 交接。)

我只知道過程中一直被舊版的 Godot 搞,原因是我們使用的是 Godot 4.2.2,但我們這組組員(包含我)的習慣是觀摩實作再操作,因此過程中我們踩了不少 breaking change 的雷,畢竟網路上大多的教學不是停留在 version 3 不然就是 <= 4.1,像是 on pressed event, on ready to call or calculate child node(s) infor 之類的語法或操作綁定方式都變了許多,只為了趕出成品的 hackathon 的我們而言這個時段是最痛苦的。

Remain 32 hours

Beck: 我快弄完場景了。

(於是他秀給我看目前他做的角色在 map 中上下左右、有 collision 的 state)

(看起來整個遊戲的邏輯與遊玩切的很棒,交接完成,我開始做劇情串接、使用者 UI/UX、串接遊戲本體、製作轉場畫面語互動、操作介紹)

最後在去吃點心前做了一個雛形,但隱含一些 bug 和問題,這個部分我想屆時吃點心時跟組員討論解決。

Remain 23 hours

(我們到系辦地下室會合準備吃官方給的點心)

Beck, Hsujinho, 我陸續到地下室準備吃點心,接著跟學弟妹們聊天,過程中吃泡麵時段時還去每一組聽了他們的簡短介紹,在大致上了解大家要做和正在做的項目後,我們回去繼續吃點心 (咦

就這樣來到了半夜時段,過程中當然進度也沒推進(嚴格上來講只有除掉一些 bug 和設計上的問題)。

Remain 17~15 hours

洗完澡澡,一切就緒,繼續開工。

來到了半夜(我們的主場)

Beck: 完蛋,有問題沒辦法解決,討論一下。

(當時我在準備聲波圖需要的素材,在跟 photoshop 打架)

Remain < 15 hours

(感覺到 Beck 要斷片了,但他說他已經做好第一關了)

我還在跟 PS 打架,原本做好了同心圓的聲波,但還在想辦法切成四個方向的散形圖。

但是在 Beck 徹底斷片前我們先討論我接下來要做的事項。

1. 4 張 rotation triangle
2. 重新開始當關按鈕
3. 顯示按鍵綁定
4. 邏輯梳理
5. 封面圖
6. 過關圖

然後我就把 PS 先丟一邊,等除了上述第一點以外的項目完成後再來處理。

Remain 12 hours

實作到一半,我想到怎麼用魔術筆優雅的切圖了,趕緊實作。
此時看到 Beck 做到第四關了。

Remain 9 hours

跟 event 和 劇本 打了一下架,將一些按鍵綁定調整了一下,順便將 Hsujinho 做好的文本從頭到尾梳理過並增加了一些轉折與生硬的部分。

Remain 5 hours

看見 Beck 脫離斷片了,原因是他將地圖中可與角色互動的元件製作完成。

Remain 4 hours

準備 merge 後測試並 release 第一版,但 collision 爛了,即時搶修。

Remain < 4 hours

花了一些時間搶修,但亂喇之下發現有些 stash 的東西不見了,HEAD 也在亂指,有些東西又花了點時間補回來。

Remain 2 hours

全部 merge 並測試完成,準備打包後丟到官方指定的 itch.io 繳交。

但過程踩了一些雷,我們使用 Web 打包出來後發現 local 端居然有 CORS 之類的問題,但轉了一圈發現我們我們夠過 deploy 到 itch.io 上他會解決這個問題。

Remain 1 hours

測試後發現字體打包上去會出現亂碼,經過多次嘗試後,無論是外面打包或包含在內的字體打包上去後都會出問題,因此我們選擇打包成 exe 上傳。

截止

我、Hsujinho、Beck 前往系辦地下室等待 demo 與頒獎

過程中有多組前來試玩,我將其當作科展的 mode 做介紹、遊玩操作。

最後頒獎

我們組的遊戲名叫「音色」,可以透過這個連結觀看並下載下來遊玩。

我們拿了第二名,第一名的美術設計與完整度確實很高,我們的話… hehehe

感想

Beck 說我們這次能得獎屬實意外,因為他對於這次的成果與過程封裝很不滿意

至於我…, 我覺得 48 小時內我們其實新學了 GDScript、Godot 4.2.2、PS、甚至是摸索了一些套件來輔助完成這個專案,並且在三個人遊戲開發相關經歷為 0 的情況下可以在大部分時間都在學如何使用這些工具的情況下可以做出像樣的 MVP 屬實不簡單,而且是在 48 小時內完成,因此我透過以上說法與 48 小時內無法過多關注 耦合與內聚 的問題稍微說 Beck 的想法。精神打氣後這 48 小時的遊戲開發體驗就到此告一段落。下台一鞠躬。